package com.yjhh.scala

import scala.collection.mutable

/**
  * 1.默认情况下map构造的是不可变的集合，里边的内容不可以修改，一旦修改就变成新的Map，原有的Map内容保持不变
  * 2.调用工厂方法模式来构造Map实例，而需要注意的是Map是接口，在apply中使用具体的实现
  * 3.如果想直接new出Map实例，则需要使用HashMap等具体的Map子类
  * 4.查询一个Map中的值一定要采用getOrElse的语法，一方面是在key不存在的情况下不报异常，另一个作用就是提供默认值，在
  *   Spark中很多默认的配置都是通过getOrElse的方式来实现的
  * 5.使用SortedMap可以得到排序的Map集合
  * 6.LinkedHashMap可以记住插入的顺序，在实际开发中非常有用
  * 7.Tuple中可以有很多不同类型的数据
  * 8.在企业实际开发大数据的时候一定会反复的使用Tuple来表达数据结构，以及使用Tuple来处理业务逻辑
  * 8.Tuple另外一个很重要的作用是作为函数的返回值，在Tuple中返回若干个值，在SparkContect中为例
  */
object HelloMapTuple {

  def main(args: Array[String]): Unit = {

    var bigDatas = Map("Spark" -> 6, "Hadoop" -> 11)

    var programingLanaguage = scala.collection.mutable.Map("Spark" -> 6, "Hadoop" -> 11, "Java" -> 23)
    programingLanaguage("Scala") = 15

    println("default=" + programingLanaguage.getOrElse("Python", 13))

    for ((name, age) <- programingLanaguage) {
      println(name + "   " + age)
    }

    val hashMap = new mutable.HashMap[String, Int]()
    hashMap += ("Java" -> 21,"Scala" -> 22, "Python" -> 55)
    for ((key, value) <- hashMap) println("--**-" + key + "    ---value=" + value)

    //有序的
    val linkedHashMap = new mutable.LinkedHashMap[String, Int]()
    linkedHashMap += ("Java" -> 21,"Scala" -> 22, "Python" -> 55)
    for ((key, value) <- linkedHashMap) println("--**-" + key + "    ---value=" + value)



    var programingLanaguage2 = scala.collection.mutable.Map(("Spark" -> 6), ("Hadoop" -> 11), ("Java" -> 23))
    var programingLanaguage3 = scala.collection.mutable.Map(("Spark", 6), ("Hadoop", 11), ("Java", 23))

    programingLanaguage3 += ("Scala" -> 22, "Python" -> 55)
    programingLanaguage3 -= ("Java")
    programingLanaguage3.remove("Spark")
    for ((key, value) <- programingLanaguage3) println("---" + key + "    ---value=" + value)
    for (key <- programingLanaguage3.keys) println(key)
    for ((value) <- programingLanaguage3.values) println(value)

    //key+1 并进行key value反转，生成一个新的map
    val revertMap = for ((key, value) <- programingLanaguage3) yield (key + 1, value)
    for ((key, value) <- revertMap) println("---" + key + "    ---value=" + value)

    val sortedMap = scala.collection.immutable.SortedMap("D" -> 4, "A" -> 1, "C" -> 3, "B" -> 2)
    for ((key, value) <- sortedMap) println("---" + key + "    ---value=" + value)



    /*****************Tuple*******************/
    val tuple = ("spring",32,"male","I am into Spark")
    println(tuple._1+"   "+tuple._4)
  }

}





















